一、云端消息推送
开发者可以通过 XLinkCloudListener 接收服务器的推送消息。这里的推送不单指通常意义上的文本消息的推送,还包含用户或者设备变化的消息推送。
1、推送消息对象
EventNotify类结构如下所示:
public class EventNoify{
//消息来源类型
public byte fromType;
//消息来源ID
public int fromId;
//消息flag
public byte notifyFlags;
//消息类型
public short messageType;
//消息内容
public byte[] payload;
}
- 消息来源类型
来源类型 | 说明 | 对应ID说明 |
---|---|---|
FROM_TYPE_FROM_SERVER | 来自服务端 | 0(固定值) |
FROM_TYPE_FROM_DEVICE | 来自设备 | deviceId |
FROM_TYPE_FROM_APP | 来自APP | appId |
- 消息类型
消息类型 | 值 | 说明 |
---|---|---|
MSG_TYPE_DATA_POINT_CHANGED | 1 | 设备通知,数据端点变化通知 |
MSG_TYPE_DATA_POINT_ALERT | 2 | 设备告警,数据端点变化引起的告警 |
MSG_TYPE_DEVICE_SHARE | 3 | 设备分享,设备管理员发出的分享 |
MSG_TYPE_PUSH_MSG | 4 | 消息广播推送 |
MSG_TYPE_DEVICE_PROP_CHANGE | 5 | 设备属性变化通知 |
MSG_TYPE_SUBSCRIPTION_CHANGE | 6 | 设备与用户订阅关系变化通知 |
MSG_TYPE_ONLINE_STATE_CHANGE | 7 | 设备在线状态变化通知 |
MSG_TYPE_ONLINE_STATE_ALERT | 8 | 设备在线状态告警 |
MSG_TYPE_HOME_MESSAGE_NOTIFY | 9 | 家庭消息通知,留言板消息 |
MSG_TYPE_HOME_INVITE | 10 | 家庭邀请通知 |
MSG_TYPE_HOME_DEVICE_PERMISSION_CHANGED | 11 | 家庭设备权限变化 |
MSG_TYPE_HOME_MEMBER_CHANGED | 12 | 家庭成员变化 |
MSG_TYPE_HOME_DEVICE_CHANGED | 13 | 家庭设备变化 |
2、推送消息对象的数据结构
各类型对应的数据请参考实体类结构:
消息类型 | 实体类 |
---|---|
消息类型 | 实体类 |
1 设备通知,数据端点变化通知 | DataPointChangedNotify |
2 设备告警,数据端点变化引起的告警 | DataPointAlertNotify |
3 设备分享,设备管理员发出的分享 | DeviceShareNotify |
4 消息广播推送 | PushMsgNotify |
5 设备属性变化通知 | DevicePropChangeNotify |
6 设备与用户订阅关系变化通知 | SubscriptionChangeNotify |
7 设备在线状态变化通知 | OnlineStateChangeNotify |
8 设备在线状态告警 | OnlineStateAlertNotify |
9 家庭消息通知,留言板消息 | HomeMessageNotify |
10 家庭邀请通知 | HomeMemberInvitedNotify |
11 家庭设备权限变化 | HomeDevicePermissionChangedNotify |
12 家庭成员变化 | HomeMemberChangedNotify |
13 家庭设备变化 | HomeDeviceChangedNotify |
3、推送消息解析
开发者可以通过 EventNotify.messageType
的来判断消息类型,再根据 EventNotify.payload
来处理消息数据。XAPP SDK 内置了 EventNotifyHelper 类方便开发者解析消息推送,当需要对 EventNotify 的数据进行处理时,可以通过 EventNotifyHelper 进行快速辅助处理
//如以下示例,通过EventNotifyHelper可快速得到订阅信息变更的推送消息对象
SubscriptionChangeNotify = EventNotifyHelper.parseSubscriptionChangeNotify(eventNotify.payload);
若 EventNotifyHelper 中不存在对应的 API 可以直接进行通知事件的解析时,则可以使用以下的通用解析方法进行处理
//使用通用解析方式解析出home设备变更的推送消息对象
HomeDeviceChangedNotify notify = EventNotifyHelper.parseNotifyFromJson(
eventNotify.data,
HomeDeviceChangedNotify.class
);
关于home相关的通知信息暂时都未提供相关的解析方法
强烈建议使用此辅助类进行事件的解析。由于通知事件实际上是字符串数据,当必须自行进行数据解析时,请忽略 payload 的前两个字节(表示该字符串的长度),再将 payload 的二进制数据按 UTF-8 的编码转成字符串再进行 json 解析。
注1:开发者在使用 XAPP SDK 时,如果想避免通过轮询的方式来更新状态,应利用上述通知来更新状态
注2:消息通知功能需用户登录,并使用云平台服务